package com.ruoyi.paper.service;

import java.util.List;
import java.util.Map;
import com.ruoyi.paper.domain.ExamPaper;
import com.ruoyi.paper.domain.ExamFolder;
import com.ruoyi.paper.domain.ExamPaperLib;
import com.ruoyi.paper.domain.ExamPaperOption;
import com.ruoyi.paper.domain.ExamStudentPaper;
import com.ruoyi.paper.domain.StudentScore;

/**
 * 实训试卷Service接口
 * 
 * @author ruoyi
 * @date 2025-04-14
 */
public interface IExamPaperService 
{
    /**
     * 查询实训试卷
     * 
     * @param paperId 实训试卷主键
     * @return 实训试卷
     */
    public ExamPaper selectExamPaperByPaperId(String paperId);

    /**
     * 查询实训试卷列表
     * 
     * @param examPaper 实训试卷
     * @return 实训试卷集合
     */
    public List<ExamPaper> selectExamPaperList(ExamPaper examPaper);

    /**
     * 新增实训试卷
     * 
     * @param examPaper 实训试卷
     * @return 结果
     */
    public int insertExamPaper(ExamPaper examPaper);

    /**
     * 修改实训试卷
     * 
     * @param examPaper 实训试卷
     * @return 结果
     */
    public int updateExamPaper(ExamPaper examPaper);

    /**
     * 批量删除实训试卷
     * 
     * @param paperIds 需要删除的实训试卷主键集合
     * @return 结果
     */
    public int deleteExamPaperByPaperIds(String[] paperIds);

    /**
     * 删除实训试卷信息
     * 
     * @param paperId 实训试卷主键
     * @return 结果
     */
    public int deleteExamPaperByPaperId(String paperId);

    /**
     * 智能组卷
     * 
     * @param examFolder 试卷规则
     * @return 结果
     */
    public int smartPaper(ExamFolder examFolder);


    /**
     * 保存学生答题并计算成绩
     * 
     * @param paperId 试卷ID
     * @param userId 用户ID
     * @param studentId 学生ID
     * @param answers 答题内容，key为paperLibId，value为答案
     * @param duration 答题时长(分钟)
     * @return 学生成绩
     */
    public StudentScore saveStudentAnswers(String paperId, String userId, String studentId, Map<String, String> answers, Long duration);



    /**
     * 根据试卷ID获取试卷规则
     * 
     * @param paperId 试卷ID
     * @return 试卷规则
     */
    public ExamFolder selectExamFolderByPaperId(String paperId);

    /**
     * 根据试卷ID和题型获取试题列表
     * 
     * @param paperId 试卷ID
     * @param type 题型
     * @return 试题列表
     */
    public List<ExamPaperLib> selectExamPaperLibByType(String paperId, String type);

    /**
     * 根据试题ID获取选项列表
     * 
     * @param libId 试题ID
     * @return 选项列表
     */
    public List<ExamPaperOption> selectExamPaperOptionByLibId(String libId);

    /**
     * 查询学生已答题的试卷列表
     * 
     * @param studentId 学生ID
     * @return 试卷列表
     */
    public List<ExamPaper> selectAnsweredPaperList(String studentId);

    /**
     * 查询试卷答题详情
     * 
     * @param paperId 试卷ID
     * @param studentId 学生ID
     * @return 试卷答题详情
     */
    public Map<String, Object> selectPaperAnswerDetail(String paperId, String studentId,String userId);

    /**
     * 获取试卷报告数据
     *
     * @param paperId 试卷ID
     * @return 试卷报告数据
     */
    public Map<String, Object> getPaperReport(String paperId);
}
